package net.siufung.security.api;

import com.alibaba.fastjson.JSONObject;
import net.siufung.security.api.context.UserContextHolder;

import java.util.Optional;

/**
 * 用户会话工具类
 * @author 陈建峰
 * @since 2021/11/12 1:29 下午
 */
public class AuthUtil {

    /**
     * 获取上下文中的用户名
     * @return 用户名
     */
    public static String getUsername() {
        return Optional.ofNullable(getCurrentUser())
                .orElse(new JSONObject()).getString("username");
    }

    /**
     * 获得上下文用户信息
     * @return 上下文用户信息
     */
    public static JSONObject getCurrentUser(){
        return  UserContextHolder.getInstance().currentUser();
    }

    /**
     * 获得上下文用户组信息
     * @return 上下文用户组信息
     */
    public static JSONObject getCurrentUserGroup(){
        return Optional.ofNullable(getCurrentUser()).orElse(new JSONObject()).getJSONObject("userGroup");
    }

    /**
     * 获取用户ID
     * @return 用户ID
     */
    public static String getUserId() {
        return Optional.ofNullable(getCurrentUser())
                .orElse(new JSONObject()).getString("id");
    }

    /**
     * 获取用户联系方式
     * @return 用户联系方式
     */
    public static String getPhone(){
        return Optional.ofNullable(getCurrentUser())
                .orElse(new JSONObject()).getString("phone");
    }

    /**
     * 获取用户名称
     * @return 用户名称
     */
    public static String getName(){
        return Optional.ofNullable(getCurrentUser())
                .orElse(new JSONObject()).getString("name");
    }


    /**
     * 是否管理员
     * @return 是否管理员
     */
    public static Boolean getSuperState(){
        return Optional.ofNullable(getCurrentUser())
                .orElse(new JSONObject()).getBoolean("superState");
    }

    /**
     * 是否密码初始化
     * @return 是否密码初始化
     */
    public static Boolean getInitState(){
        return Optional.ofNullable(getCurrentUser())
                .orElse(new JSONObject()).getBoolean("initState");
    }

    /**
     * 获取租户ID
     * @return 租户ID
     */
    public static String getTenantId() {
        return Optional.ofNullable(getCurrentUserGroup())
                .orElse(new JSONObject()).getString("tenantId");
    }

    /**
     * 获取组织ID
     * @return 租户ID
     */
    public static String getDeptId() {
        return Optional.ofNullable(getCurrentUserGroup())
                .orElse(new JSONObject()).getString("createdDept");
    }

    /**
     * 获取扩展属性
     * @return 扩展属性
     */
    public static JSONObject getExtra() {
        return Optional.ofNullable(getCurrentUser())
                .orElse(new JSONObject()).getJSONObject("extra");
    }

}
